import axios from 'axios'
import { debounce } from 'lodash'

const instance = axios.create({
    // baseURL: 'http://http://localhost/:8888', // 设置基础URL
    baseURL: 'http://192.168.198.129:8888', // 打包时需要换成真实环境的主机ip
    timeout: 5000, // 请求超时时间
})

let requestMap = new Map()

// 添加请求拦截器
instance.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么，比如添加请求头
        const token = localStorage.getItem('token')
        if (token) {
            config.headers.Authorization = `Bearer ${token}`
        }
        return config
    },
    error => {
        // 对请求错误做些什么
        return Promise.reject(error)
    }
)

// 添加响应拦截器
instance.interceptors.response.use(
    response => {
        // 对响应数据做些什么，比如处理通用的错误状态码
        return response.data
    },
    error => {
        // 对响应错误做些什么，比如根据状态码进行特定的处理
        if (error.response) {
            switch (error.response.status) {
                case 404:
                    // 处理404错误
                    break
                case 401:
                    // 处理401错误
                    break
                case 500:
                    // 处理500错误
                    break
                default:
                    // 处理其他错误
                    break
            }
        }
        return Promise.reject(error)
    }
)

/**
 * 防抖拦截重复请求
 */
instance.interceptors.request.use(config => {
    const key = `${config.method}_${config.url}_${JSON.stringify(config.data)}`

    // 如果已经有相同的请求在发送，则取消本次请求
    if (requestMap.has(key)) {
        const cancelToken = requestMap.get(key)
        cancelToken.cancel('Duplicate request')
    }

    config.cancelToken = new axios.CancelToken(cancelToken => {
        requestMap.set(key, { cancel: cancelToken })
    })

    return config
}, debounce(() => {
    requestMap = new Map()
}, 300))

export default instance